package com.example.demo2.common.util;

import org.apache.http.util.TextUtils;
import org.dom4j.Element;


/**
 * 类名： MessageUtil
 * 
 * <br>
 * 描述：报文验签与组装工具类
 * 
 * 
 * @author haplant
 * 
 * @date 2015年4月23日 下午2:35:42
 * 
 * @version 1.0
 * 
 * <br>
 *          Copyright by LANDI.
 * 
 * <br>
 *          Program Name:
 */
public class MessageUtil {

	/**
	 * 功能描述：报文验签
	 * 
	 * @param str
	 * @param sign
	 * @return
	 * 
	 * @author haplant
	 * 
	 * @date: 2015年4月23日 下午3:56:50
	 */
	public static boolean checkSign(String str, String sign,String signKey) {
		if (TextUtils.isEmpty(str) || TextUtils.isEmpty(sign)) {
			return false;
		}
		String strHead = getCenterStr(str, "head");
		String strBody = getCenterStr(str, "body");
		if (strHead.equals("") && str.indexOf("<head/>") != -1) {
			strHead = "<head/>";
		}
		if (strBody.equals("") && str.indexOf("<body/>") != -1) {
			strBody = "<body/>";
		}
		StringBuffer signStr = new StringBuffer();
		signStr.append(signKey).append("|").append(strHead).append("|").append(strBody);
		String encipher = MD5.MD5Encode(signStr.toString());// 生成签名串
		System.out.println("------------生成签名串-----"+encipher);
		return sign.equals(encipher);
	}

	/**
	 * 功能描述：组装报文
	 * 
	 * @param responseHead
	 * @param responseBody
	 * @return
	 * 
	 * @author haplant
	 * 
	 * @date: 2015年4月24日 上午10:32:00
	 */
	public static String providerOutXml(Element responseHead, Element responseBody,String signKey) {
		responseHead.addElement("time").addText(String.valueOf(System.currentTimeMillis()));

		// 生成验签
		StringBuffer signStr = new StringBuffer();
		String strHead = responseHead.asXML();
		String strBody = responseBody.asXML();
		signStr.append(signKey).append("|").append(strHead).append("|").append(strBody);
		String encipher = MD5.MD5Encode(signStr.toString());// 生成签名串

		StringBuffer sb = new StringBuffer();
		sb.append("<?xml version='1.0' encoding='UTF-8'?>");
		sb.append("<root>");
		sb.append(strHead);
		sb.append(strBody);
		sb.append("<sign>");
		sb.append(encipher);
		sb.append("</sign>");
		sb.append("</root>");
		return sb.toString();
	}

	/**
	 * 功能描述：组装报文（无验签）
	 * 
	 * @param responseHead
	 * @param responseBody
	 * @return
	 * 
	 * @author haplant
	 * 
	 * @date: 2015年9月8日 下午2:05:21
	 */
	public static String providerOutXmlOfNoSign(Element responseHead, Element responseBody) {
		responseHead.addElement("time").addText(String.valueOf(System.currentTimeMillis()));

		String strHead = responseHead.asXML();
		String strBody = responseBody.asXML();

		StringBuffer sb = new StringBuffer();
		sb.append("<?xml version='1.0' encoding='UTF-8'?>");
		sb.append("<root>");
		sb.append(strHead);
		sb.append(strBody);
		sb.append("</root>");
		return sb.toString();
	}

	/**
	 * 功能描述：截取中间字符串
	 * 
	 * @param str
	 * @param elementStr
	 * @return
	 * 
	 * @author haplant
	 * 
	 * @date: 2015年5月12日 下午7:19:59
	 */
	private static String getCenterStr(String str, String elementStr) {
		if (TextUtils.isEmpty(str) || TextUtils.isEmpty(elementStr)) {
			return "";
		}
		String beginStr = "<" + elementStr + ">";
		String endStr = "</" + elementStr + ">";
		int beginIndex = str.indexOf(beginStr);
		int endIndex = str.lastIndexOf(endStr);
		if (beginIndex == -1 || endIndex == -1 || beginIndex > endIndex) {
			return "";
		} else {
			return str.substring(beginIndex, endIndex + endStr.length());
		}
	}
}
